import axios from "axios";
import { ElNotification } from "element-plus";
import router from "../router";


/**
 * 请求拦截器
 * @Authorization:请求头中携带的 tokenStr 值
 */
axios.interceptors.request.use(config => {

    if (window.sessionStorage.getItem('tokenStr')) {
        config.headers['Authorization'] = window.sessionStorage.getItem('tokenStr');
    }
    return config;
}, error => {
    console.log(error)
})


/**
 * 相应拦截器
 * success 表示请求成功，但也有可能业务逻辑错误。
 * 相应拦截器，主要处理业务逻辑错误
 * ToDo 后端会传回 三个信息 code 响应码，message 相应信息，object
 */
axios.interceptors.response.use(success => {
    if (success.status && success.status === 200) {
        const code = success.data.code;
        // ToDo 500 表示业务逻辑错误，401 表示未登录，403 表示权限禁止
        if (code === 500 && code === 401 && code === 403) {
            ElNotification({
                message: success.data.message,
                title: '不允许操作！',
                type: "warning",
            })
            return;
        }
        if (success.data.message) {
            ElNotification({
                title: '成功！',
                message: success.data.message,
                type: "success"
            })
        }
    }
    return success.data;
}, error => {
    if (error.response.code === 504 || error.response.code === 404) {
        ElNotification({
            title: '找不到服务器！',
            type: "error",
            message: '路径错误，或服务器问题，请联系管理员o(╯□╰)o'
        })
    } else if(error.response.code === 403) {
        ElNotification({
            title: '权限不足！',
            type: "error",
            message: '权限不足请联系管理员！'
        })
    } else if (error.response.code === 401) {
        ElNotification({
            title: '未登录！',
            type: "error",
            message: '请重新登录！'
        })
        router.replace('/')
    } else {
        if (error.response.date.message) {
            ElNotification.error({message: error.response.date.message});
        } else {
            ElNotification.error({message: '未知错误！请联系管理员！'})
        }
    }
    return null; // 既然出错就不用返回给 axios 进一步处理了
})

// post 请求
let base = '';
export const postRequest = (url, params) => {
    return axios({
        method: 'post',
        url: `${base}${url}`, // 此处并非 单引号！
        data: params
    })
}

// get 请求
export const getRequest = (url, params) => {
    return axios({
        method: 'get',
        url: `${base}${url}`, // 此处并非 单引号！
        data: params
    })
}

// put 请求
export const putRequest = (url, params) => {
    return axios({
        method: 'put',
        url: `${base}${url}`, // 此处并非 单引号！
        data: params
    })
}

// delete 请求
export const deleteRequest = (url, params) => {
    return axios({
        method: 'delete',
        url: `${base}${url}`, // 此处并非 单引号！
        data: params
    })
}
